export const store = {
  state: {
    arr: [10, 20, 30],
  },
  action: {
    arrPush(state, action) {
      state.arr.push(action.value);
    },
  },
  asyncAction: {
    asysArrPush(dispatch) {
      setTimeout(() => {
        dispatch({ type: "arrPush", value: 33 });
      },1000);
    },
  },
};
let reducer = (
  state = {
    ...store.state,
  },
  action
) => {
  let newState = JSON.parse(JSON.stringify(state));
  // switch (action.type) {
  //   case store.arrPush:
  //     store.action[store.arrPush](newState, action);
  //     break;
  //   default:
  //     break;
  // }
  /**
   * 优化：
   * 思路1、循环判断 action.type 和 action.actionNames 中是否一致
   * 思路2、直接判断模块中的action中是否有action[action.type]这个方法，有就调用
   *      （优点：1、不用循环判断；2、模块中也不用再多一个 actionNames 属性；3、模块中也不用再循环添加 actionNames）
   */
  if (store.action[action.type]) {
    store.action[action.type](newState, action);
  }
  return newState;
}; 
export default reducer;
